home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / jovept2.arc / TAG.C < prev    next >
Text File  |  1985-05-30  |  2KB  |  117 lines

  1. /* tag.c */
  2.  
  3. /* JOVE/MSDOS. K. Mitchum 1/85 */
  4. /* Modifications for personal use only. */
  5. /* original code J. Payne LSRHS 5/83 */
  6. /* Ken Mitchum */
  7. /* University of Pittsburgh */
  8. /* Decision Systems Laboratory */
  9. /*
  10.    Jonathan Payne at Lincoln-Sudbury Regional High School 5-25-83
  11.   
  12.    C tags package.  */
  13.  
  14. #include "jove.h"
  15.  
  16.  
  17. extern char searchbuf[];
  18.  
  19. /* Find the line with the correct tagname at the beginning of the line.
  20.  * then put the data into the struct, and then return a pointer to
  21.  * the struct.  0 if an error.
  22.  */
  23.  
  24. look_up(sstr, filebuf, name)
  25. register char    *name;
  26. char    *sstr,
  27.     *filebuf;
  28. {
  29.     register int    namlen = strlen(name);
  30.     char    line[LBSIZE];
  31.     register char    *cp;
  32.  
  33.     if ((io = open("tags", 0)) == -1) {
  34.         message(IOerr("open", "tags"));
  35.         return 0;
  36.     }
  37.     while (getfline(line) != EOF) {
  38.         if (line[0] != *name || strncmp(name, line, namlen) != 0)
  39.             continue;
  40.         if (line[namlen] != '\t')
  41.             continue;
  42.         else {
  43.             char    *endp,
  44.                 *newp;
  45.  
  46.             if (cp = index(line, '\t'))
  47.                 cp++;
  48.             else
  49. tagerr:                complain("Bad tag file format");
  50.             if (endp = index(cp, '\t'))
  51.                 *endp = 0;
  52.             else
  53.                 goto tagerr;
  54.             strcpy(filebuf, cp);
  55.             if ((newp = index(endp + 1, '/')) ||
  56.                     (newp = index(endp + 1, '?')))
  57.                 newp++;
  58.             else
  59.                 goto tagerr;
  60.             strcpy(sstr, newp);
  61.             sstr[strlen(sstr) - 1] = 0;
  62.             IOclose();
  63.             return 1;
  64.         }
  65.     }
  66.     IOclose();
  67.     return 0;
  68. }
  69.  
  70. TagError(tag)
  71. char    *tag;
  72. {
  73.     s_mess("tag: %s not found", tag);
  74. }
  75.  
  76. /*
  77.  * Find_tag searches for the 'tagname' in the file "tags".
  78.  * The "tags" file is in the format generated by "/usr/bin/ctags".
  79.  */
  80.  
  81. find_tag(tagname)
  82. char    *tagname;
  83. {
  84.     char    filebuf[50],
  85.         sstr[100];
  86.     BUFLOC    *bp;
  87.  
  88.     if (look_up(sstr, filebuf, tagname) == 0) {
  89.         TagError(tagname);
  90.         return;
  91.     }
  92.  
  93.     SetBuf(do_find(curwind, filebuf));
  94.     Bof();
  95.  
  96.     if ((bp = dosearch(sprint(sstr, tagname), 1, 1)) == 0)
  97.         TagError(tagname);
  98.     else
  99.         SetDot(bp);
  100. }
  101.  
  102. /* Called from user typing ^X t */
  103.  
  104. FindTag()
  105. {
  106.     char    *tagname;
  107.  
  108.     tagname = ask((char *) 0, FuncName());
  109.     find_tag(tagname);
  110. }
  111.  
  112.  
  113. /*-------------------------o.s. dependent-----------------------*/
  114.  
  115. /* end */
  116.  
  117.